虚拟机分类

虚拟机可以分为process VM和system VM。process VM实现了ABI,ABI由ISA和syscall实现。system VM实现了一整套硬件。process VM典型代表是高级语言虚拟机。如JVM,其实现的ABI是java bytecode。从而实现compile once, run everywhere.

ART最早出现在Android 4.4 当时还只是测试功能。在Android 5以后,ART已经完全取代了dalvik。

尽管JVM和ART都可以被认为是广义的java虚拟机。但JVM执行的是.class文件形式存在的java bytecode,ART执行的是dex bytecode。

ART有三种执行模式:interpreter,JIT,AOT。AOT(Ahead of time)是提前编译,提前将输入的dex编译为.oat格式输出。这是dex2oat工具的功能。其核心代码位于art/compiler/

Android source code directory

主要关注三个文件夹:dex2oat/dex2oat工具的接口代码;compiler/目录为AOT编译相关代码;runtime/目录为运行时相关代码。